﻿#pragma once
/*
给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。

假设环境不允许存储 64 位整数（有符号或无符号）。


示例 1：

输入：x = 123
输出：321
示例 2：

输入：x = -123
输出：-321
示例 3：

输入：x = 120
输出：21
示例 4：

输入：x = 0
输出：0

url: https://leetcode.cn/problems/reverse-integer/description/
*/
#include <string>

using namespace std;

namespace Solution
{
	class Solution1 {
	private:
		bool cmpStr(std::string& str1, std::string& str2)
		{
			if (str1.size() > str2.size())
			{
				return true;
			}else if (str1.size() < str2.size())
			{
				return false;
			}
			else
			{
				for (int i = 0; i < str1.size(); i++)
				{
					if (str1[i] > str2[i]) return true;
					else if(str1[i] < str2[i]) return false;
				}
			}
			return false;
		}
	public:
		int reverse(int x) {
			std::string maxVal = "2147483647";
			std::string maxVal2 = "2147483648";
			if (x == 0) return x;
			int ab_x = std::abs(x);
			int ret = 0;
			std::string str = "";
			while (ab_x > 0)
			{
				int m = ab_x % 10;
				if (str.size() == 0 && m == 0)
				{

				}
				else
					str += std::to_string(m);
				ab_x = ab_x / 10;
			}
			if (x > 0 && cmpStr(str,maxVal)) return 0;
			if (x < 0 && cmpStr(str,maxVal2)) return 0;
			ret = std::stoi(str);
			if (x < 0) ret = 0 - ret;
			return ret;
		}
	};
}
